package com.lantosec.hmrp.modules.workflow.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lantosec.hmrp.core.kit.PageVO;
import com.lantosec.hmrp.core.kit.Result;
import com.lantosec.hmrp.modules.sysdata.vo.SysDataProcessTaskVO;
import com.lantosec.hmrp.modules.workflow.vo.*;
import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.task.api.Task;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 工作流查询服务
 */
public interface IWorkflowQueryService {

    /**
     * 根据任务Id查询流程信息
     *
     * @param condition 查询流程信息VO对象
     * @return
     */
    Result<ProcessInfoVO> getProcessInfo(QueryProcessVO condition);

    /**
     * 获取流程变量
     *
     * @param taskId 任务ID
     * @param key    键
     * @return
     */
    Object getVariablesByTaskIdAsMap(String taskId, String key);

    /**
     * 查询我的待办任务
     *
     * @param userId 用户Id
     * @return 返回任务列表
     */
    Result<Page<FlowTaskVO>> queryTodoTask(PageVO page, String userId);

    /**
     * 查询我的待办任务数量
     *
     * @param userId 用户Id
     * @return 返回数量
     */
    long countTodoTask(String userId);

    /**
     * 根据用户Id查询参与过的流程任务列表（暂弃，新接口是 ISysDataProcessTaskService.queryPartakeTask）
     *
     * @param userId 用户Id
     * @return 返回任务列表
     */
    @Deprecated
    Result<Page<FlowTaskVO>> queryHisTaskInstanceByUserId(PageVO page, String userId);

    /**
     * 根据用户Id查询发起的流程实例列表（已完成）
     *
     * @param userId 用户Id
     * @return 返回任务列表
     */
    Result<Page<HisProcessInstanceVO>> queryStartProInstanceByUserId(PageVO page, String userId);

    /**
     * 根据流程实例Id查询查询流程实例历史活动
     *
     * @param processInstanceId 流程实例Id
     * @return 流程实例
     */
    Result<List<HisActivityInstanceVO>> queryHisActivityInstance(String processInstanceId);

    /**
     * 根据流程实例Id查询查询流程实例历史任务
     *
     * @param processInstanceId 流程实例Id
     * @return 流程实例
     */
    Result<List<SysDataProcessTaskVO>> queryHisTaskInstance(String processInstanceId);

    /**
     * 获取流程图片，此接口返回png图片的base64，新接口（getProcessImage）返回xml文件，前端处理显示
     * @param processInstanceId     流程实例Id
     * @param processDefinitionId   流程定义Id
     * @return
     */
    @Deprecated
    Result<String> getProcessDiagram(String processInstanceId, String processDefinitionId);

    /**
     * 获取流程XML和历史活动节点信息
     * @param processInstanceId     流程实例Id
     * @param processDefinitionId   流程定义Id
     * @return
     */
    Result<ProcessImageVO> getProcessImage(String processInstanceId, String processDefinitionId);

    /**
     * 查询流程是否完成
     * @param processInstanceId 流程Id
     * @return
     */
    boolean isFinished(String processInstanceId);

    /**
     * 查询过期的任务
     * @param date
     * @return
     */
    List<Task> queryDueTask(Date date);
}
